// This example shows how to recursively browse the nodes in the OPC address space. using System; using System.Diagnostics; using OpcLabs.EasyOpc; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.DataAccess.AddressSpace; using OpcLabs.EasyOpc.OperationModel; namespace DocExamples.DataAccess._EasyDAClient { partial class BrowseNodes { public static void Recursive() { var stopwatch = new Stopwatch(); stopwatch.Start(); // Instantiate the client object. var client = new EasyDAClient(); _branchCount = 0; _leafCount = 0; try { BrowseFromNode(client, "OPCLabs.KitServer.2", ""); } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); return; } stopwatch.Stop(); Console.WriteLine("Browsing has taken (milliseconds): {0}", stopwatch.ElapsedMilliseconds); Console.WriteLine("Branch count: {0}", _branchCount); Console.WriteLine("Leaf count: {0}", _leafCount); } private static void BrowseFromNode( EasyDAClient client, ServerDescriptor serverDescriptor, DANodeDescriptor parentNodeDescriptor) { Debug.Assert(client != null); Debug.Assert(serverDescriptor != null); Debug.Assert(parentNodeDescriptor != null); // Obtain all node elements under parentNodeDescriptor var browseParameters = new DABrowseParameters(); // no filtering whatsoever DANodeElementCollection nodeElementCollection = client.BrowseNodes(serverDescriptor, parentNodeDescriptor, browseParameters); // Remark: that BrowseNodes(...) may also throw OpcException; a production code should contain handling for // it, here omitted for brevity. foreach (DANodeElement nodeElement in nodeElementCollection) { Debug.Assert(nodeElement != null); Console.WriteLine(nodeElement); // If the node is a branch, browse recursively into it. if (nodeElement.IsBranch) { _branchCount++; BrowseFromNode(client, serverDescriptor, nodeElement); } else { _leafCount++; } } } private static int _branchCount; private static int _leafCount; } }
# This example shows how to recursively browse the nodes in the OPC address space. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import timeit # Import .NET namespaces. from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.OperationModel import * def browseFromNode(client, serverDescriptor, parentNodeDescriptor): global branchCount global leafCount assert client is not None assert serverDescriptor is not None assert parentNodeDescriptor is not None # Obtain all node elements under parentNodeDescriptor. browseParameters = DABrowseParameters() # no filtering whatsoever nodeElementCollection = client.BrowseNodes(serverDescriptor, parentNodeDescriptor, browseParameters) # BrowseNodes(...) may also throw OpcException; here it is handled by the caller. for nodeElement in nodeElementCollection: assert nodeElement is not None print(nodeElement) # If the node is a branch, browse recursively into it. if nodeElement.IsBranch: branchCount = branchCount + 1 browseFromNode(client, serverDescriptor, DANodeDescriptor(nodeElement)) else: leafCount = leafCount + 1 beginTime = timeit.default_timer() # Instantiate the client object. client = EasyDAClient() branchCount = 0 leafCount = 0 try: browseFromNode(client, ServerDescriptor('OPCLabs.KitServer.2'), DANodeDescriptor('')) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) exit() endTime = timeit.default_timer() print() print('Browsing has taken (milliseconds): ',(endTime - beginTime)*1000) print('Branch count: ', branchCount); print('Leaf count: ', leafCount);
' This example shows how to recursively browse the nodes in the OPC address space. Imports OpcLabs.EasyOpc Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.DataAccess.AddressSpace Imports OpcLabs.EasyOpc.OperationModel Namespace DataAccess._EasyDAClient Partial Friend Class BrowseNodes Shared Sub Recursive() Dim stopwatch = New Stopwatch() stopwatch.Start() Dim client = New EasyDAClient() _branchCount = 0 _leafCount = 0 Try BrowseFromNode(client, "OPCLabs.KitServer.2", "") Catch opcException As OpcException Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message) Exit Sub End Try stopwatch.Stop() Console.WriteLine("Browsing has taken (milliseconds): {0}", stopwatch.ElapsedMilliseconds) Console.WriteLine("Branch count: {0}", _branchCount) Console.WriteLine("Leaf count: {0}", _leafCount) End Sub Private Shared Sub BrowseFromNode( _ client As EasyDAClient, serverDescriptor As ServerDescriptor, parentNodeDescriptor As DANodeDescriptor) Debug.Assert(client IsNot Nothing) Debug.Assert(serverDescriptor IsNot Nothing) Debug.Assert(parentNodeDescriptor IsNot Nothing) ' Obtain all node elements under parentNodeDescriptor Dim browseParameters = New DABrowseParameters() ' no filtering whatsoever Dim nodeElementCollection As DANodeElementCollection = client.BrowseNodes(serverDescriptor, parentNodeDescriptor, browseParameters) ' Remark: that BrowseNodes(...) may also throw OpcException; a production code should contain handling for ' it, here omitted for brevity. For Each nodeElement As DANodeElement In nodeElementCollection Debug.Assert(nodeElement IsNot Nothing) Console.WriteLine(nodeElement) ' If the node is a branch, browse recursively into it. If nodeElement.IsBranch Then _branchCount += 1 BrowseFromNode(client, serverDescriptor, nodeElement) Else _leafCount += 1 End If Next nodeElement End Sub Private Shared _branchCount As Integer Private Shared _leafCount As Integer End Class End Namespace
Copyright © 2004-2023 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base. Technical support: Online Forums, FAQ.